package com.glink.manage.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.glink.common.exception.GeneralSimpleException;
import com.glink.manage.domain.ConstructionWorkUnitRelaBean;
import com.glink.manage.dto.constructionwork.ConstructionWorkUnitIdDTO;
import com.glink.manage.dto.constructionwork.ConstructionWorkUnitPageDTO;
import com.glink.manage.dto.constructionwork.ConstructionWorkUnitSaveDTO;
import com.glink.manage.vo.participatingunit.ParticipatingUnitSimpleInfoVO;

import java.util.List;

/**
 * @author  qiushaoshan
 * @since  2025-01-08
 */
public interface ConstructionWorkUnitRelaService extends IService<ConstructionWorkUnitRelaBean> {

    /**
     * 根据施工工程ID统计参建单位个数
     * @param constructionWorkObjId 施工工程ID
     * @return 数量
     */
    Integer countByConstructionWorkObjId(String constructionWorkObjId);

    /**
     * 查询参建单位
     * @param dto 施工工程ID
     * @return 参建单位信息
     */
    IPage<ParticipatingUnitSimpleInfoVO> findUnitByPage(ConstructionWorkUnitPageDTO dto);

    /**
     * 保存参建单位
     * @param dto 保存信息
     * @return 保存状态
     */
    Boolean saveUnit(ConstructionWorkUnitSaveDTO dto) throws GeneralSimpleException;

    /**
     * 修改工程与参建单位关联信息
     * @param dto 修改工程与参建单位关联信息
     * @return 修改状态
     */
    Boolean updateUnitRelaInfo(ConstructionWorkUnitSaveDTO dto) throws GeneralSimpleException;

    /**
     * 移除参建单位
     * @param dto 移除信息
     * @return 移除状态
     */
    Boolean delUnit(ConstructionWorkUnitIdDTO dto) throws GeneralSimpleException;

    /**
     * 移除参建单位
     * @param unitObjId 工程ID
     * @return 移除状态
     */
    Boolean delUnit(String unitObjId);
    /**
     * 根据施工工程查询关联的参建单位
     * @param workIdList 施工工程ID
     * @return  参建单位ID
     */
    List<String> findUnitIdByWorkIdIn(List<String> workIdList);

    /**
     * 删除参建单位关系
     * @param unitId 参建单位ID
     */
    void delUnitByUnitId(String unitId);

    /**
     * 校验是否可以移除
     * @param dto 参建单位ID
     * @return 准入用户名
     */
    List<String> findDelUnitExistValidAccess(ConstructionWorkUnitIdDTO dto) throws GeneralSimpleException;

    /**
     * 根据参建单位查询工程ID
     * @param orgId 参建单位ID
     * @return 工程ID
     */
    List<String> findWorkIdByUnitId(String orgId);

    /**
     * 根据单位查询监理单位所监理的工程，查询工程下的所有参建单位
     *
     * @param orgId  监理单位
     * @param workId
     * @return 参见单位
     */
    List<String> findParticipatingUnitObjIdBySupervisorUnit(String orgId, String workId);

    /**
     * 移除单位负责热
     * @param personId 人员ID
     */
    void removeUnitResponsiblePersonByPersonId(String personId);

    /**
     * 查询总包单位所管辖的参建单位列表
     *
     * @param constructionWorkIdList 工程
     * @return 参建单位
     */
    List<String> findGeneralContractingUnitParticipatingUnitObjIdByObjIdIn(List<String> constructionWorkIdList);

    /**
     * 根据总包单位ID查询工程ID
     * @param unitObjId 总包单位ID
     * @return 工程ID
     */
    List<String> findWorkIdByGeneralContractingUnitId(String unitObjId);
}
